<!-- 封装modal模态框弹窗的组件 -->

<template>
    <div class="mask" key="div" v-if="visible">
        <!-- v-if就是用来控制模态框的显示和隐藏 里面的visible在父组件容器组件里面设置-->
        <div class="modal-wrap">
            <div class="title">
              提示
            </div>
            <div class="body">
               提示内容
            </div>
            <div class="footer">
                <button class="del" @click="$emit('on-cancel')">取消</button>
                <!-- 设置点击按钮后改变visible的值来关闭模态框，使用子传父的流程 -->
                <button class="confirm" @click="$emit('on-confirm')">确定</button>
                <!-- click是自定义事件，$emit就是子传父的方法，on-confirm是在父亲组件里面设置 -->
            </div>
        </div>
    </div>
</template>

<script>
//思路
//1.控制组件的显示和隐藏，想到使用v-if来控制显示和隐藏，需要接收一个布尔值，设定为visible
//visible在父组件里面设置，父组件里面设置的visible用父传子的方法props传递到这个组件。
//模态框上有确定和关闭的按钮，这两个按钮点击后也要关闭模态框，也就点击按钮后也需要改变visible的值为false
//这就涉及到了一个问题，子组件里面的按钮如何改变父组件里面设置的visible的值 这就涉及到子传父的流程
//我们设定自定义事件名 取消按钮触发的事件名：on-cancel 确定按钮触发的事件叫做on-confirm
//2.一个组件如何能够能够灵活的展示不用的弹窗内容
//3.点击按钮的时候需要做什么
export default {
    props:{//父传子的方法 
        visible:{//父组件传递过来的属性
            type:Boolean,//校验为布尔值
            default(){
                return false
            }
        }
    }
}

</script>


<style scoped>
.mask {
    background-color: rgba(0, 0, 0, .6);
    position: fixed;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    display: flex;
    justify-content: center;
    align-items: center;
}

.modal-wrap {
    border-radius: 10px;
    background-color: #fff;
    width: 400px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    /* border: 1px solid #ccc; */
}

.mask .title,
.mask .footer,
.mask .body {
    margin: 20px 0
}

button {
    outline: none;
    border: 0;
    width: 100px;
    height: 40px;
    background: linear-gradient(90deg, #1596fb, #002dff);
    border-radius: .28571429rem;
    /* display: block; */

    color: #fff;
    cursor: pointer;
}

.footer {
    width: 100%;
    text-align: center;
}

.footer button {
    margin-left: 20px
}

.del {
    background-image: linear-gradient(90deg, #fb1565, #ff00cc);
}
button:hover {
    background-image: linear-gradient(90deg, #aebaac, #57da23);
}
</style>